package stream流直接写;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/3/1 11:15
 */
public class leetcode349数组的交集 {
    /*
    stream 流 的
    练习题
     */


    public static void main(String[] args) {

//        String.class.getClassLoader().loadClass();




    }

    public int[] solution(int nums1[],int nums2[]){

        HashSet<Integer> set = new HashSet<>();
            Arrays.stream(nums1).distinct().forEach(num->{
                if(!set.contains(num)){
                    set.add(num);
                }
            });
            List<Integer> list = new ArrayList<>(set.size());
        Arrays.stream(nums2).distinct().map(num->Integer.valueOf(num)).filter(num -> set.contains(num)).forEach(num->list.add(num));


        int ans[] = new int[list.size()];
        for(int i = 0;i < list.size();i++){
            ans[i] = list.get(i);
        }

        return ans;
    }


    /*
    更优的解
    目前来说是最优解
     */
    public int[] intersection(int[] nums1, int[] nums2) {
        int []map = new int [10000];
        for(int i = 0;i < nums1.length;i++){
            if(map[nums1[i]] == 0){
                map[nums1[i]] = 1;
            }
        }
        int i = 0;
        for(int num : nums2){
            if(map[num] != 0){
                nums1[i++] = num;
                /*
                  尤其是上面这一 行 和下面这一行 代码 真的是 很优秀！
                  如果 出现过 ，记录 之后 ，  就把 num 出现的 痕迹 消除掉 ，也就是  map[num] = 0;

                 */
                map[num] = 0;
            }
        }
        int ans[] = new int [i];
        for(int j = 0;j < i;j++){
            ans[j] = nums1[j];
        }
        return ans;
    }

}
